package _03_栈;

import java.util.Stack;

public class _224_基本计算器 {

    public static void main(String[] args) {
        String str = " 2-1 + 2 ";
        System.out.println(calculate(str));
    }


    // 解题1，展开多现实，可以把表达式看做都是加法。
    public static int calculate(String s) {
        Stack<Integer> ops = new Stack<>();
        // 初始化数值，为加法
        int index = 0;
        int sign = 1;
        int n = s.length();
        int total = 0;
        ops.push(sign);
        while (index < n) {
            if (s.charAt(index) == ' ') {
                index++;
            } else if (s.charAt(index) == '+') {
                // 当前符号还是需要根据括号外符号判断
                sign = ops.peek();
                index++;
            } else if (s.charAt(index) == '-') {
                sign = -ops.peek();
                index++;
            } else if (s.charAt(index) == '(') {
                ops.push(sign);
                index++;
            } else if (s.charAt(index) == ')') {
                ops.pop();
                index++;
            } else if (s.charAt(index) != ' '){
                int sum = 0;
                // 计算大于9的值
                while (index < n && Character.isDigit(s.charAt(index))) {
                    sum = sum * 10 + s.charAt(index) - '0';
                    index++;
                }
                // 累加
                total = total + sum * sign;
            }
        }
        return total;
    }
}
